// 在小程序页面，如果想要使用Store对象的数据或方法
// 
import { BehaviorWithStore } from "mobx-miniprogram-bindings"
import { numStore } from "../../stores/numstore"
import { cloneStore } from "../../stores/clonestore"

// BehaviorWithStore 方法的作用，就是让页面和Store建立关联
export const testBehavior = BehaviorWithStore({
    // 如果一个组件或者页面需要绑定多个Store对象
    // 需要将storeBindings配置项改造成一个数组
    // 数组每一项是一个个要绑定的Store对象
    storeBindings: [
        {
            store: numStore,
            fields: ['numA', 'numB', 'sum'],
            actions: ['update']
        },
        // 如果一个组件或者页面需要绑定多个Store对象
        // 从Store对象中引入了相同的数据或者方法
        // 这时候代码就会出现异常
        {
            store: cloneStore,
            // 第一种解决方案：将fields以及actions改成对象方式
            // fields: ['numA', 'numB', 'sum'],
            // actions: ['update']
            // fields: {
            //     a: 'numA',
            //     b: 'numB',
            //     total: 'sum'
            // },
            // actions: {
            //     updateData: 'update'
            // },

            // 第二种解决方案：添加命名空间
            // 如果是数据存在冲突，存在相同的数据或者方法，添加命名空间没有问题的
            // 但是如果是方法冲突，存在相同的数据或者方法，依然需要使用对象的方式来改造
            // 在添加命名空间以后，如果需要访问数据，需要加上命名空间的名字才可以
            // 比如：cloneStore.numA
            namespace: 'cloneStore',
            fields: ['numA', 'numB', 'sum'],
            actions: {
                updateData: 'update'
            },
        }
    ]
})